The efficient use of the costly physical resources of a computer or computer system has always been a priority in computer science. One technique for maximizing the use of the physical resources of a computer is multiplexing. Multiplexing conceptually means the doing of multiple tasks by interleaving them. For example, multiplexing the central processing unit (CPU) allows for much greater efficiency in CPU utilization and has been used since mainframe computing. The multiplexing of the CPU is handled by the operating system (OS) software running on the computer.
Virtualization is a technique in which a software component, typically known as a virtual machine monitor (VMM) or hypervisor, multiplexes the physical resources of a computer as virtual machines (VMs). A virtual machine (VM) is a software abstraction of an entire computer or all of the physical resources of a computer. An OS can run on the VM as if it were the entire computer. That is, the VM is provided by software running on the computer that is generally called a VMM or hypervisor. In contrast, with a single physical resource of a computer being multiplexed by an OS, now, an entire computer can be multiplexed by a VMM. The multiplexing of a computer by a VMM allows for the running of multiple guest OSs on corresponding multiple VMs. The computer on which a VM executes is generally called a host or host computer. The VMs each access a virtual address space that is not tied to the underlying physical memory of the host computer.
Oversubscription conceptually means that the sum of the allocated resources is greater than the actual resources available. Oversubscription and multiplexing are related concepts, and multiplexing may allow for oversubscription. For example, an OS generally runs on a computer, the computer can be oversubscribed by providing multiple VMs to run multiple guest OSs. The host computer is oversubscribed if the combined resource needs of the VMs exceed the physical resource capacity available to the host. Examples of these physical resources are processors, computing cores, memory, and storage capacity.
Memory oversubscription conceptually is a memory management technique that allows for the allocation of memory that is greater than the physical memory available. Generally, in virtualization, each VM has a fixed amount of virtualized memory, the sum of which is less than or equal to the total physical memory available on the host computer. The physical memory of the host is divided up into pages by the host memory system that the VMM can arbitrarily remap, which means that the VMs do not need contiguous memory. Generally, in a non-oversubscribed situation, there is an injective mapping from the virtualized memory of the VM to the pages of physical memory in the host computer.
Paging is conceptually the process by which one or more memory pages are swapped in and out of physical memory in a computer, or virtualized memory in a VM. The page that is swapped out may be written to local storage such as a swap partition or pagefile. The corresponding page table entry is marked as not present, and the page can be swapped in to memory as required. Operating systems have been paging out memory to disk for a long time. A person of ordinary skill in the art would understand that a request for a memory page means that the contents of the memory page are being requested, generally being identified by a page number. It is understood that memory pages can vary in size and memory page size is generally determined by the architecture of the physical CPU or CPUs on the host computer.
The Internet or networks of computers in general are formed from multiple computers connected by a communication network. In a network of VMs, multiple virtual machine monitors (VMMs) may cooperate over a communications network to more efficiently manage the guest OSs running on the VMs and the physical resources of the host computer. It is understood that the term server is used as an analogous term to computer, and is generally used to refer to a computer that is providing a particular service or services.
A network of VMs is made up of a master VM with a varying number of clone VMs, also referred to as replica VMs, where the clone VMs are running or hosted on a host computer. The master VM is the VM that defines the computing environment of the network of clone VMs. For example, the computing environment typically includes the base operating system, libraries, network configuration and storage devices. A clone VM is an independently functioning copy of a master VM. The master VM may cooperate with the clone VM, or the clone VM may run independently. Generally, clone VMs are created as required and destroyed when no longer required, this allows for the efficient use of the host's physical resources. It is understood that each host contains a VMM capable of supporting the cloning primitive, among the other general capabilities that a VMM provides, such as, creating a VM, destroying a VM, and managing the host's resources. See, for example, Horacio Andres Lagar Cavilla, et al., “SnowFlock: rapid virtual machine cloning for cloud computing”, In EuroSys '09: Proceedings of the 4th ACM European conference on Computer Systems (2009), p. 1-12.
Before a clone VM is cloned from a master VM, a copy of the current state of the master VM's memory system is created. This immutable copy of the master VM memory system is created at the time after invocation of the cloning operation and before the creation of the clone VM begins on the clone VM host, because, it is from this copy that the clone VM is cloned from. Generally, only a subset of the copy of the master VM's memory system is initially communicated to the host of the clone VM during cloning. As the clone VM executes, it will make requests for memory pages in its virtualized memory system, generally the VMM will load the requested memory page but potentially the contents of the requested memory page was not transmitted to the host of the clone VM during the cloning operation. In this case, the VMM will fetch the requested memory page from a memory server, which has access to the copy of the master VM memory system, over the communication network and then load the fetched requested memory page for the clone VM.